/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.softmarket.modelo;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author maraujo2
 */
@Entity
@Table(name = "pessoa_fisica")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "PessoaFisica.findAll", query = "SELECT p FROM PessoaFisica p"),
    @NamedQuery(name = "PessoaFisica.findByIdPessoaFisica", query = "SELECT p FROM PessoaFisica p WHERE p.pessoaFisicaPK.idPessoaFisica = :idPessoaFisica"),
    @NamedQuery(name = "PessoaFisica.findByPessoaIdPessoa", query = "SELECT p FROM PessoaFisica p WHERE p.pessoaFisicaPK.pessoaIdPessoa = :pessoaIdPessoa"),
    @NamedQuery(name = "PessoaFisica.findByRg", query = "SELECT p FROM PessoaFisica p WHERE p.rg = :rg"),
    @NamedQuery(name = "PessoaFisica.findByCpf", query = "SELECT p FROM PessoaFisica p WHERE p.cpf = :cpf"),
    @NamedQuery(name = "PessoaFisica.findBySexo", query = "SELECT p FROM PessoaFisica p WHERE p.sexo = :sexo"),
    @NamedQuery(name = "PessoaFisica.findByConjuge", query = "SELECT p FROM PessoaFisica p WHERE p.conjuge = :conjuge"),
    @NamedQuery(name = "PessoaFisica.findByEstadoCivil", query = "SELECT p FROM PessoaFisica p WHERE p.estadoCivil = :estadoCivil"),
    @NamedQuery(name = "PessoaFisica.findByDataNascimento", query = "SELECT p FROM PessoaFisica p WHERE p.dataNascimento = :dataNascimento"),
    @NamedQuery(name = "PessoaFisica.findByProfissao", query = "SELECT p FROM PessoaFisica p WHERE p.profissao = :profissao"),
    @NamedQuery(name = "PessoaFisica.findByLocalTrabalho", query = "SELECT p FROM PessoaFisica p WHERE p.localTrabalho = :localTrabalho"),
    @NamedQuery(name = "PessoaFisica.findByNacionalidade", query = "SELECT p FROM PessoaFisica p WHERE p.nacionalidade = :nacionalidade"),
    @NamedQuery(name = "PessoaFisica.findByNaturalidade", query = "SELECT p FROM PessoaFisica p WHERE p.naturalidade = :naturalidade")})
public class PessoaFisica implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected PessoaFisicaPK pessoaFisicaPK;
    @Basic(optional = false)
    @Column(name = "rg")
    private String rg;
    @Basic(optional = false)
    @Column(name = "cpf")
    private String cpf;
    @Basic(optional = false)
    @Column(name = "sexo")
    private char sexo;
    @Basic(optional = false)
    @Column(name = "conjuge")
    private String conjuge;
    @Basic(optional = false)
    @Column(name = "estado_civil")
    private String estadoCivil;
    @Basic(optional = false)
    @Column(name = "data_nascimento")
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;
    @Basic(optional = false)
    @Column(name = "profissao")
    private String profissao;
    @Basic(optional = false)
    @Column(name = "local_trabalho")
    private String localTrabalho;
    @Basic(optional = false)
    @Column(name = "nacionalidade")
    private String nacionalidade;
    @Basic(optional = false)
    @Column(name = "naturalidade")
    private String naturalidade;
    @JoinColumn(name = "pessoa_id_pessoa", referencedColumnName = "id_pessoa", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Pessoa pessoa;

    public PessoaFisica() {
    }

    public PessoaFisica(PessoaFisicaPK pessoaFisicaPK) {
        this.pessoaFisicaPK = pessoaFisicaPK;
    }

    public PessoaFisica(PessoaFisicaPK pessoaFisicaPK, String rg, String cpf, char sexo, String conjuge, String estadoCivil, Date dataNascimento, String profissao, String localTrabalho, String nacionalidade, String naturalidade) {
        this.pessoaFisicaPK = pessoaFisicaPK;
        this.rg = rg;
        this.cpf = cpf;
        this.sexo = sexo;
        this.conjuge = conjuge;
        this.estadoCivil = estadoCivil;
        this.dataNascimento = dataNascimento;
        this.profissao = profissao;
        this.localTrabalho = localTrabalho;
        this.nacionalidade = nacionalidade;
        this.naturalidade = naturalidade;
    }

    public PessoaFisica(int idPessoaFisica, int pessoaIdPessoa) {
        this.pessoaFisicaPK = new PessoaFisicaPK(idPessoaFisica, pessoaIdPessoa);
    }

    public PessoaFisicaPK getPessoaFisicaPK() {
        return pessoaFisicaPK;
    }

    public void setPessoaFisicaPK(PessoaFisicaPK pessoaFisicaPK) {
        this.pessoaFisicaPK = pessoaFisicaPK;
    }

    public String getRg() {
        return rg;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public char getSexo() {
        return sexo;
    }

    public void setSexo(char sexo) {
        this.sexo = sexo;
    }

    public String getConjuge() {
        return conjuge;
    }

    public void setConjuge(String conjuge) {
        this.conjuge = conjuge;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    public String getProfissao() {
        return profissao;
    }

    public void setProfissao(String profissao) {
        this.profissao = profissao;
    }

    public String getLocalTrabalho() {
        return localTrabalho;
    }

    public void setLocalTrabalho(String localTrabalho) {
        this.localTrabalho = localTrabalho;
    }

    public String getNacionalidade() {
        return nacionalidade;
    }

    public void setNacionalidade(String nacionalidade) {
        this.nacionalidade = nacionalidade;
    }

    public String getNaturalidade() {
        return naturalidade;
    }

    public void setNaturalidade(String naturalidade) {
        this.naturalidade = naturalidade;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (pessoaFisicaPK != null ? pessoaFisicaPK.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof PessoaFisica)) {
            return false;
        }
        PessoaFisica other = (PessoaFisica) object;
        if ((this.pessoaFisicaPK == null && other.pessoaFisicaPK != null) || (this.pessoaFisicaPK != null && !this.pessoaFisicaPK.equals(other.pessoaFisicaPK))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.softmarket.modelo.PessoaFisica[ pessoaFisicaPK=" + pessoaFisicaPK + " ]";
    }
    
}
